home *** CD-ROM | disk | FTP | other *** search
/ Internet Warrior 1993 July / Internet Warrior No. 1 July 1993 - Austin Code Works.ISO / docs / tcpip / tcpip.doc < prev    next >
Encoding:
Text File  |  1993-02-21  |  54.8 KB  |  943 lines

  1. Article 441 of comp.protocols.tcp-ip:
  2. From: hedrick@topaz.rutgers.edu (Charles Hedrick)
  3. Subject: TCP/IP introduction
  4. Message-ID: <12979@topaz.rutgers.edu>
  5. Date: 28 Jun 87 07:52:42 GMT
  6.  
  7.  
  8. I keep seeing requests on various newsgroups for an introduction to
  9. TCP/IP.  I also get such requests locally.  I believe that the only
  10. appropriate description of TCP/IP is the RFC's.  However I also think
  11. a brief introduction is likely to be helpful before plowing right
  12. into them.  The following document is an attempt to do that.  It also
  13. recommends some RFC's to look at and tells you how to get them.
  14.  
  15.         --------------------------------
  16.  
  17. This document is a brief introduction to TCP/IP, followed by advice on
  18. what to read for more information.  This is not intended to be a
  19. complete description, but merely enough of an introduction to allow
  20. you to start reading the RFC's.  At the end of the document there will
  21. be a list of the RFC's that we recommend reading.
  22.  
  23. TCP/IP is a set of protocols developed to allow cooperating computers
  24. to share resources across a network.  It was developed by a community
  25. of researchers centered around the ARPAnet.  Certainly the ARPAnet is
  26. the best-known TCP/IP network.  However as of June, 87, at least 130
  27. different vendors had products that support TCP/IP, and thousands of
  28. networks of all kinds use it.
  29.  
  30. First some basic definitions.  Although TCP/IP (or IP/TCP) seems to be
  31. the most common term these days, most of the documentation refers to
  32. the "Internet protocols".  The Internet is a collection of networks,
  33. including the Arpanet, NSFnet, regional networks such as NYsernet,
  34. local networks at a number of University and research institutions,
  35. and a number of military networks.  The term "Internet" applies to
  36. this entire set of networks.  The subset of them which is managed by
  37. the Department of Defense is referred to as the "DDN" (Defense Data
  38. Network).  This includes some research-oriented networks, such as the
  39. Arpanet, as well as more strictly military ones.  (Because much of the
  40. funding for Internet protocol developments is done via the DDN
  41. organization, the terms Internet and DDN can sometimes seem
  42. equivalent.)  All of these networks are connected to each other, and
  43. users can send messages from any of them to any other (except where
  44. security or other policy restrictions control access).  Officially
  45. speaking, the Internet protocol documents are simply standards adopted
  46. by the Internet community for its own use.  More recently, the
  47. Department of Defense issued a MILSPEC definition of TCP/IP.  This was
  48. intended to be a more formal definition, appropriate for use in
  49. purchasing specifications.  However most of the TCP/IP community
  50. continues to use the Internet standards.  The MILSPEC version is
  51. intended to be consistent with it.
  52.  
  53. Whatever it is called, TCP/IP is a family of protocols.  A few are
  54. basic ones used for many applications.  These include IP, TCP, and
  55. UDP.  Others are protocols for doing specific tasks, e.g. transferring
  56. files between computers, sending mail, or finding out who is logged in
  57. on another computer.  Any real application will use several of these
  58. protocols.  A typical situation is sending mail.  First, there is a
  59. protocol for mail.  This defines a set of commands which one machine
  60. sends to another, e.g. commands to specify who the sender of the
  61. message is, who it is being sent to, and then the text of the message.
  62. However this protocol assumes that there is a way to communicate
  63. reliably between the two computers.  Mail, like other application
  64. protocols, simply defines a set of commands and messages to be sent.
  65. It is designed to be used together with TCP and IP. TCP is responsible
  66. for making sure that the commands get through to the other end.  It
  67. keeps track of what is sent, and retransmitts anything that did not
  68. get through.  If any message is too large for one packet, e.g. the
  69. text of the mail, TCP will split it up into several packets, and make
  70. sure that they all arrive correctly.  Since these functions are needed
  71. for many applications, they are put together into a separate protocol,
  72. rather than being part of the specifications for sending mail.  You
  73. can think of TCP as forming a library of routines that applications
  74. can use when they need reliable network communications with another
  75. computer.  Similarly, TCP calls on the services of IP.  Although the
  76. services that TCP supplies are needed by many applications, there are
  77. still some kinds of applications that don't need them.  However there
  78. are some services that every application needs.  So these services are
  79. put together into IP.  As with TCP, you can think of IP as a library
  80. of routines that TCP calls on, but which is also available to
  81. applications that don't use TCP.  This strategy of building several
  82. levels of protocol is called "layering".  We think of the applications
  83. programs such as mail, TCP, and IP, as being separate "layers", each
  84. of which calls on the services of the layer below it.  Generally,
  85. TCP/IP applications use 4 layers:
  86.  
  87.   - an application protocol such as mail
  88.   - a protocol such as TCP that provides services need by many applications
  89.   - IP, which provides the basic service of getting packets to their
  90.     destination
  91.   - the protocols needed to manage a specific physical medium, such as
  92.     Ethernet or a point to point line.
  93.  
  94. TCP/IP is based on the "catenet model".  (This is described in more
  95. detail in ien-48.txt.)  This model assumes that there are a large
  96. number of independent networks connected together by gateways.  The
  97. user should be able to access computers or other resources on any of
  98. these networks.  Packets will often pass through a dozen different
  99. networks before getting to their final destination.  The routing
  100. needed to accomplish this should be completely invisible to the user.
  101. As far as the user is concerned, all he needs to know in order to
  102. access another system is an "Internet address".  This is an address
  103. that looks like 128.6.4.194.  It is actually a 32-bit number.  However
  104. it is normally written as 4 decimal numbers, each representing 8 bits
  105. of the address.  (The term "octet" is used by Internet documentation
  106. for such 8-bit chunks.  The term "byte" is not used, because TCP/IP is
  107. supported by some computers that have byte sizes other than 8 bits.)
  108. Generally the structure of the address gives you some information
  109. about how to get to the system.  For example, 128.6 is a network
  110. number assigned by a central authority to Rutgers University.  Rutgers
  111. uses the next octet to indicate which of the campus Ethernets is
  112. involved.  128.6.4 happens to be an Ethernet used by the Computer
  113. Science Department.  The last octet allows for up to 254 systems on
  114. each Ethernet.  Note that 128.6.4.194 and 128.6.5.194 would be
  115. different systems.  (The structure of an Internet address is described
  116. in a bit more detail later.)
  117.  
  118. Of course we normally refer to systems by name, rather than by
  119. Internet address.  When we specify a name, the network software looks
  120. it up in a database, and comes up with the corresponding Internet
  121. address.  Most of the network software deals strictly in terms of the
  122. address.  (rfc-882.txt describes the database used to look up names.)
  123.  
  124. TCP/IP is a "connectionless" protocol.  Information is transfered in
  125. "packets".  Each of these packets is sent through the network
  126. individually.  There are provisions to open connections to systems.
  127. However at some level, information is put into packets, and those
  128. packets are treated by the network as completely separate.  For
  129. example, suppose you want to transfer a 15000 octet file.  Most
  130. networks can't handle a 15000 octet packet.  So the protocols will
  131. break this up into something like 30 500-octet packets.  Each of these
  132. packets will be sent to the other end.  At that point, they will be
  133. put back together into the 15000-octet file.  However while those
  134. packets are in transit, the network doesn't know that there is any
  135. connection between them.  It is perfectly possible that packet 14 will
  136. actually arrive before packet 13.  It is also possible that somewhere
  137. in the network, an error will occur, and a packet won't get through
  138. at all.  In that case, that packet has to be sent again.  In fact,
  139. there are two separate protocols involved in doing this.  TCP (the
  140. "transmission control protocol") is responsible for breaking up the
  141. message into packets, reassembling them at the other end, resending
  142. anything that gets lost, and putting things back in the right order.
  143. IP (the "internet protocol") is responsible for routing individual
  144. packets.  It may seem like TCP is doing all the work.  And in small
  145. networks that is true.  However in the Internet, simply getting a
  146. packet to its destination can be a complex job.  A connection may
  147. require the packet to go through several networks at Rutgers, a serial
  148. line to the John von Neuman Supercomputer Center, a couple of
  149. Ethernets there, a series of 56Kbaud phone lines to another NSFnet
  150. site, and more Ethernets on another campus.  Keeping track of the
  151. routes to all of the destinations and handling incompatibilities among
  152. different transport media turns out to be a complex job.  Note that
  153. the interface between TCP and IP is fairly simple.  TCP simply hands
  154. IP a packet with a destination.  IP doesn't know how this packet
  155. relates to any packet before it or after it.
  156.  
  157. It may have occured to you that something is missing here.  We have
  158. talked about Internet addresses, but not about how you keep track of
  159. multiple connections to a given system.  Clearly it isn't enough to
  160. get a packet to the right destination.  TCP has to know which
  161. connection this packet is part of.  This task is referred to as
  162. "demultiplexing."  In fact, there are several levels of demultiplexing
  163. going on in TCP/IP.  The information needed to do this demultiplexing
  164. is contained in a series of "headers".  A header is simply a few extra
  165. octets tacked onto the beginning of a packet by some protocol in order
  166. to keep track of it.  It's a lot like putting a letter into an
  167. envelope and putting an address on the outside of the envelope.
  168. Except with modern networks it happens several times.  It's like you
  169. put the letter into a little envelope, your secretary puts that into a
  170. somewhat bigger envelope, the campus mail center puts that envelope
  171. into a still bigger one, etc.  Here is an overview of the headers that
  172. get stuck on a message that passes through a typical TCP/IP network:
  173.  
  174. We start with a single data stream, say a file you are trying to
  175. send to some other computer:
  176.  
  177.    ......................................................
  178.  
  179. TCP breaks it up into managable chunks.  (In order to do this, TCP has
  180. to know how large a packet your network can handle.  Actually, the
  181. TCP's at each end say how big a packet they can handle, and then they
  182. pick the smallest size.)
  183.  
  184.    ....   ....   ....   ....   ....   ....   ....   ....
  185.  
  186. TCP puts a header at the front of each packet.  This header actually
  187. contains at least 20 octets, but the most important ones are a source
  188. and destination "port number" and a "sequence number".  The port
  189. numbers are used to keep track of different conversations.  Suppose 3
  190. different people are transferring files.  Your TCP might allocate port
  191. numbers 1000, 1001, and 1002 to these transfers.  When you are sending
  192. a packet, this becomes the "source" port number, since you are the
  193. source of the packet.  Of course the TCP at the other end has assigned
  194. a port number of its own for the conversation.  Your TCP has to know
  195. the port number used by the other end as well.  (It finds out when the
  196. connection starts, as we will explain below.)  It puts this in the
  197. "destination" port field.  Of course if the other end sends a packet
  198. back to you, the source and destination port numbers will be reversed,
  199. since then it will be the source and you will be the destination.
  200. Each packet has a sequence number.  This is used so that the other end
  201. can make sure that it gets the packets in the right order, and that it
  202. hasn't missed any.  (See the TCP specification for details.  TCP
  203. doesn't number the packets, but the octets.  So if there are 500
  204. octets of data in each packet, the first packet might be numbered 0,
  205. the second 500, the next 1000, the next 1500, etc.)  Finally, I will
  206. mention the Checksum.  This is a number that is computed by adding up
  207. all the octets in the packet (more or less - see the TCP spec).  The
  208. result is put in the header.  TCP at the other end computes the
  209. checksum again.  If they disagree, then something bad happened to the
  210. packet in transmission, and it is thrown away.  So here's what the
  211. packet looks like now.
  212.  
  213.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  214.    |          Source Port          |       Destination Port        |
  215.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  216.    |                        Sequence Number                        |
  217.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  218.    |                      various other junk                       |
  219.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  220.    |                      various other junk                       |  
  221.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  222.    |           Checksum            |           other junk          |
  223.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  224.    |   your data ... next 500 octets                               |
  225.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  226.    |   ......                                                      |
  227.  
  228. If we abbreviate the TCP header as "T", the whole file now looks like this:
  229.  
  230.    T....   T....   T....   T....   T....   T....   T....   T....
  231.  
  232. TCP now sends each of these packets to IP.  Of course it has to tell
  233. IP the Internet address of the computer at the other end.  Note that
  234. this is all IP is concerned about.  It doesn't care about what is in
  235. the packet, or even in the TCP header.  IP's job is simply to find a
  236. route for the packet and get it to the other end.  In order to allow
  237. gateways or other intermediate systems to forward the packet, it adds
  238. its own header.  The main things in this header are the source and
  239. destination Internet address (32-bit addresses, like 128.6.4.194), the
  240. protocol number, and another checksum.  The source Internet address is
  241. simply the address of your machine.  (This is necessary so the other
  242. end knows where the packet came from.)  The destination Internet
  243. address is the address of the other machine.  (This is necessary so
  244. any gateways in the middle know where you want the packet to go.)  The
  245. protocol number tells IP at the other end to send the packet to TCP.
  246. Although most IP traffic uses TCP, there are other protocols that can
  247. use IP, so you have to tell IP which protocol to send the packet to.
  248. Finally, the checksum allows IP at the other end to verify that the
  249. packet wasn't damaged in transit.  Note that TCP and IP have separate
  250. checksums.  This is because IP doesn't know anything about TCP.  As
  251. far as IP is concerned, everything after its header is just a bunch of
  252. bits.  So IP computes a checksum of its own header, and IP at the
  253. other end checks it to make sure that the message didn't get damaged
  254. in transit.  Once IP has tacked on its header, here's what the
  255. message looks like:
  256.  
  257.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  258.    |                      various other junk                       |  
  259.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  260.    |                      various other junk                       |  
  261.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  262.    |     junk      |    Protocol   |         Header Checksum       |
  263.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  264.    |                       Source Address                          |
  265.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  266.    |                    Destination Address                        |
  267.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  268.    |  TCP header, then your data ......
  269.  
  270. If we represent the IP header by an "I", your file now looks like this:
  271.  
  272.    IT....   IT....   IT....   IT....   IT....   IT....   IT....   IT....
  273.  
  274. At this point, it's possible that no more headers are needed.  If your
  275. computer happens to have a direct phone line connecting it to the
  276. destination computer, or to a gateway, it may simply send the packets
  277. out on the line (though likely a synchronous protocol such as HDLC
  278. would be used, and it would add at least a few octets at the beginning
  279. and end).
  280.  
  281. However most of our networks these days use Ethernet.  So now we have
  282. to describe Ethernet's headers.  Unfortunately, Ethernet has its own
  283. addresses.  The people who designed Ethernet wanted to make sure that
  284. no two machines would end up with the same Ethernet address.
  285. Furthermore, they didn't want the user to have to worry about
  286. assigning addresses.  So each Ethernet controller comes with an
  287. address builtin from the factory.  In order to make sure that they
  288. would never have to reuse addresses, the Ethernet designers allocated
  289. 48 bits for the Ethernet address.  People who make Ethernet equipment
  290. have to register with a central authority, to make sure that the
  291. numbers they assign don't overlap any other manufacturer.  Ethernet is
  292. a "broadcast medium".  That is, it is in effect like an old party line
  293. telephone.  When you send a packet out on the Ethernet, every machine
  294. on the network sees the packet.  So something is needed to make sure
  295. that the right machine gets it.  As you might guess, this involves the
  296. Ethernet header.  Every Ethernet packet has a 14-octet header that
  297. includes the source and destination Ethernet address, and a type code.
  298. Each machine is supposed to pay attention only to packets with its own
  299. Ethernet address in the destination field.  (It's perfectly possible
  300. to cheat, which is one reason that Ethernet communications are not
  301. terribly secure.)  Note that there is no connection between the
  302. Ethernet address and the Internet address.  Each machine has to have a
  303. table of what Ethernet address corresponds to what Internet address.
  304. (We will describe how this table is constructed a bit later.)  In
  305. addition to the addresses, the header contains a type code.  The type
  306. code is to allow for several different protocol families to be used on
  307. the same network.  So you can use TCP/IP, DECnet, Xerox NS, etc. at
  308. the same time.  Each of them will put a different value in the type
  309. field.  Finally, there is a checksum.  The Ethernet controller
  310. computes a checksum of the entire packet.  When the other end receives
  311. the packet, it recomputes the checksum, and throws the packet away if
  312. the answer disagrees with the original.  The checksum is put on the
  313. end of the packet, not in the header.  The final result is that your
  314. message looks like this:
  315.  
  316.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  317.    |       Ethernet destination address (first 32 bits)            |
  318.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  319.    | Ethernet dest (last 16 bits)  |Ethernet source (first 16 bits)|
  320.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  321.    |       Ethernet source address (last 32 bits)                  |
  322.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  323.    |        Type code              |
  324.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  325.    |  IP header, then TCP header, then your data                   |
  326.    |                                                               |
  327.     ...
  328.    |                                                               |
  329.    |   end of your data                                            |
  330.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  331.    |                       Ethernet Checksum                       |
  332.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  333.  
  334. If we represent the Ethernet header with "E", and the Ethernet
  335. checksum with "C", your file now looks like this:
  336.  
  337.    EIT....C   EIT....C   EIT....C   EIT....C   EIT....C   EIT....C 
  338.  
  339. When these packets are received by the other end, of course all the
  340. headers are removed.  The Ethernet interface removes the Ethernet
  341. header and the checksum.  It looks at the type code.  Since the type
  342. code is the one assigned to IP, the Ethernet device driver passes the
  343. packet up to IP.  IP removes the IP header.  It looks at the IP
  344. protocol field.  Since the protocol type is TCP, it passes the packet
  345. up to TCP.  TCP now looks at the packet sequence number.  It uses the
  346. sequence numbers and other information to combine all the packets into
  347. the original file.
  348.  
  349. The ends our initial summary of TCP/IP.  There are still some crucial
  350. concepts we haven't gotten to, so we'll now go back and add details in
  351. several areas.  (For detailed descriptions of the items discussed here
  352. see, rfc793.txt for TCP, rfc791.txt for IP, and rfc894.txt and
  353. rfc826.txt for sending IP over Ethernet.)
  354.  
  355.  
  356. Well-known sockets and the applications layer
  357. =============================================
  358.  
  359. So far, we have described how a stream of data is broken up into
  360. packets, sent to another computer, and put back together.  However
  361. something more is needed in order to accomplish anything useful.
  362. There has to be a way for you to open a connection to a specified
  363. computer, log into it, tell it what file you want, and control the
  364. transmission of the file.  (If you have a different application in
  365. mind, e.g. computer mail, some analogous protocol is needed.)  This is
  366. done by "application protocols".  The application protocols run "on
  367. top" of TCP/IP.  That is, when they want to send a message, they give
  368. the message to TCP.  TCP makes sure it gets delivered to the other
  369. end.  Because TCP and IP take care of all the networking details, the
  370. applications protocols can treat a network connection as if it were a
  371. simple byte stream, like a terminal or phone line.
  372.  
  373. Before going into more details about applications programs, we have to
  374. describe how you find an application.  Suppose you want to send a file
  375. to a computer whose Internet address is 128.6.4.7.  To start the
  376. process, you need more than just the Internet address.  You have to
  377. connect to the file transfer server at the other end.  In general,
  378. network programs are specialized for a specific set of tasks.  Most
  379. systems have separate programs to handle file transfers, remote
  380. terminal logins, mail, etc.  When you connect to 128.6.4.7, you have
  381. to specify that you want to talk to the file transfer program.  This
  382. is done by having "well-known sockets" for each program.  Recall that
  383. TCP uses port numbers to keep track of individual conversations.  User
  384. programs normally use more or less random port numbers.  However
  385. specific port numbers are assigned to the programs that sit waiting
  386. for requests.  For example, if you want to send a file, you will start
  387. a program called "ftp".  It will open a connection using some random
  388. number, say 1234, for the port number on its end.  However it will
  389. specify port number 21 for the other end.  This is the official port
  390. number for the ftp server.  Note that there are two different programs
  391. involved.  You run ftp on your side.  This is a program designed to
  392. accept commands from your terminal and pass them on to the other end.
  393. The program that you talk to on the other machine is the ftp server.
  394. It is designed to accept commands from the network connection, rather
  395. than an interactive terminal.  There is no need for your program to
  396. use a well-known socket number for itself.  Nobody is trying to find
  397. it.  However the servers have to have well-known numbers, so that
  398. people can open connections to them and start sending them commands.
  399. The official port numbers for each program are given in "Assigned
  400. Numbers".
  401.  
  402. Note that a connection is actually described by a set of 4 numbers:
  403. the Internet address at each end, and the TCP port number at each end.
  404. Every packet has all four of those numbers in it.  (The Internet
  405. addresses are in the IP header, and the TCP port numbers are in the
  406. TCP header.)  In order to keep things straight, no two connections can
  407. have the same set of numbers.  However it is enough for any one number
  408. to be different.  For example, it is perfectly possible for two
  409. different users on a machine to be sending files to the same other
  410. machine.  This could result in connections with the following
  411. parameters:
  412.  
  413.                Internet addresses         TCP ports
  414. connection 1  128.6.4.194, 128.6.4.7      1234, 21
  415. connection 2  128.6.4.194, 128.6.4.7      1235, 21
  416.  
  417. Since the same machines are involved, the Internet addresses are the
  418. same.  Since they are both doing file transfers, one end of the
  419. connection involves the well-known port number for file transfer.  The
  420. only thing that differs is the port number for the program that the
  421. users are running.  That's enough of a difference.  Generally, at
  422. least one end of the connection asks the network software to assign it
  423. a port number that is guaranteed to be unique.  Normally, it's the
  424. user's end, since the server has to use a well-known number.
  425.  
  426. Now that we know how to open connections, let's get back to the
  427. applications programs.  As mentioned above, once TCP has opened a
  428. connection, we have something that might as well be a simple wire.
  429. All the hard parts are handled by TCP and IP.  However we still need
  430. some agreement as to what we send over this connection.  In effect
  431. this is simply an agreement on what set of commands the application
  432. will understand, and the format in which they are to be sent.
  433. Generally, what is sent is a combination of commands and data.  They
  434. use context to differentiate.  For example, the mail protocol works
  435. like this: Your mail program opens a connection to the mail server at
  436. the other end.  Your program gives it your machine's name, the sender
  437. of the message, and the recipients you want it sent to.  It then sends
  438. a command saying that it is starting the message.  At that point, the
  439. other end stops treating what it sees as commands, and starts
  440. accepting the message.  Your end then starts sending the text of the
  441. message.  At the end of the message, a special mark is sent (a dot in
  442. the first column).  After that, both ends understand that your program
  443. is again sending commands.  This is the simplest way to do things, and
  444. the one that most applications use.
  445.  
  446. File transfer is somewhat more complex.  The file transfer protocol
  447. involves two different connections.  It starts out just like mail.
  448. The user's program sends commands like "log me in as this user", "here
  449. is my password", "send me the file with this name".  However once the
  450. command to send data is sent, a second connection is opened for the
  451. data itself.  It would certainly be possible to send the data on the
  452. same connection, as mail does.  However file transfers often take a
  453. long time.  The designers of the file transfer protocol wanted to
  454. allow the user to continue issuing commands while the transfer is
  455. going on.  For example, the user might make an inquiry, or he might
  456. abort the transfer.  Thus the designers felt it was best to use a
  457. separate connection for the data and leave the original command
  458. connection for commands.  (It is also possible to open command
  459. connections to two different computers, and tell them to send a file
  460. from one to the other.  In that case, the data couldn't go over the
  461. command connection.)
  462.  
  463. Remote terminal connections use another mechanism still.  For remote
  464. logins, there is just one connection.  It normally sends data.  When
  465. it is necessary to send a command (e.g. to set the terminal type or to
  466. change some mode), a special character is used to indicate that the
  467. next character is a command.  If the user happens to type that special
  468. character as data, two of them are sent.
  469.  
  470. We are not going to describe the application protocols in detail in
  471. this document.  It's better to read the RFC's yourself.  However there
  472. are a couple of common conventions used by applications that will be
  473. described here.  First, the common network representation: TCP/IP is
  474. intended to be usable on any computer.  Unfortunately, not all
  475. computers agree on how data is represented.  There are differences in
  476. character codes (ASCII vs. EBCDIC), in end of line conventions
  477. (carriage return, line feed, or a representation using counts), and in
  478. whether terminals expect characters to be sent individually or a line
  479. at a time.  In order to allow computers of different kinds to
  480. communicate, each applications protocol defines a standard
  481. representation.  Note that TCP and IP do not care about the
  482. representation.  TCP simply sends octets.  However the programs at
  483. both ends have to agree on how the octets are to be interpreted.  The
  484. RFC for each application specifies the standard representation for
  485. that application.  Normally it is "net ASCII".  This uses ASCII
  486. characters, with end of line denoted by a carriage return followed by
  487. a line feed.  For remote login, there is also a definition of a
  488. "standard terminal", which turns out to be a half-duplex terminal with
  489. echoing happening on the local machine.  Most applications also make
  490. provisions for the two computers to agree on other representations
  491. that they may find more convenient.  For example, PDP-10's have 36-bit
  492. words.  There is a way that two PDP-10's can agree to send a 36-bit
  493. binary file.  Similarly, two systems that prefer full-duplex terminal
  494. conversations can agree on that.  However each application has a
  495. standard representation, which every machine must support.
  496.  
  497. (For more details about the protocols mentioned in this section, see
  498. rfc821.txt and rfc822.txt for mail, rfc959.txt for file transfer, and
  499. rfc854.txt and rfc855.txt for remote logins.  For the well-known port
  500. numbers, see the current edition of Assigned Numbers, and possible
  501. rfc814.txt.)
  502.  
  503.  
  504. Protocols other than TCP: UDP and ICMP
  505. ======================================
  506.  
  507. So far, we have described only connections that use TCP.  Recall that
  508. TCP is responsible for breaking up messages into packets, and
  509. reassembling them properly.  However in many applications, we have
  510. messages that will always fit in a single packet.  An example is name
  511. lookup.  When a user attempts to make a connection to another system,
  512. he will generally specify the system by name, rather than Internet
  513. address.  His system has to translate that name to an address before
  514. it can do anything.  Generally, only a few systems have the database
  515. used to translate names to addresses.  So the user's system will want
  516. to send a query to one of the systems that has the database.  This
  517. query is going to be very short.  It will certainly fit in one packet.
  518. So will the answer.  Thus it seems silly to use TCP.  Of course TCP
  519. does more than just break things up into packets.  It also makes sure
  520. that the data arrives, resending packets where necessary.  But for a
  521. question that fits in a single packet, we don't need all the
  522. complexity of TCP to do this.  If we don't get an answer after a few
  523. seconds, we can just ask again.  For applications like this, there are
  524. alternatives to TCP.
  525.  
  526. The most common alternative is UDP ("user datagram protocol").  UDP is
  527. designed for applications where you don't need to put sequences of
  528. packets together.  It fits into the system much like TCP.  There is a
  529. UDP header.  The network software puts the UDP header on the front of
  530. your data, just as it would put a TCP header on the front of your
  531. data.  Then UDP sends the data to IP, which adds the IP header,
  532. putting UDP's protocol number in the protocol field instead of TCP's
  533. protocol number.  However UDP doesn't do as much as TCP does.  It
  534. doesn't split data into multiple packets.  It doesn't keep track of
  535. what it has sent so it can resend if necessary.  About all that UDP
  536. provides is port numbers, so that several programs can use UDP at
  537. once.  UDP port numbers are used just like TCP port numbers.  There
  538. are well-known port numbers for servers that use UDP.  Note that the
  539. UDP header is shorter than a TCP header.  It still has source and
  540. destination port numbers, and a checksum, but that's about it.  No
  541. sequence number, since it is not needed.  UDP is used by the protocols
  542. that handle name lookups (see ien-116.txt, rfc882.txt, and
  543. rfc883.txt), and a number of similar protocols.
  544.  
  545. Another alternative protocol is ICMP ("Internet control message
  546. protocol").  ICMP is used for error messages, and other messages
  547. intended for the TCP/IP software itself, rather than any particular
  548. user program.  For example, if you attempt to connect to a host, your
  549. system may get back an ICMP message saying "host unreachable".  ICMP
  550. can also be used to find out some information about the network.  See
  551. rfc792.txt for details of ICMP.  ICMP is similar to UDP, in that it
  552. handles messages that fit in one packet.  However it is even simpler
  553. than UDP.  It doesn't even have port numbers in its header.  Since all
  554. ICMP messages are interpreted by the network software itself, no port
  555. numbers are needed to say where a ICMP message is supposed to go.
  556.  
  557.  
  558. Routing
  559. =======
  560.  
  561. The description above indicated that the IP implementation is
  562. responsible for getting packets to the destination indicated by the
  563. destination address, but little was said about how this would be done.
  564. The task of finding how to get a packet to its destination is referred
  565. to as "routing".  In fact many of the details depend upon the
  566. particular implementation.  However some general things can be said.
  567.  
  568. First, it is necessary to understand the model on which IP is based.
  569. IP assumes that a system is attached to some local network.  We assume
  570. that the system can send packets to any other system on its own
  571. network.  (In the case of Ethernet, it simply finds the Ethernet
  572. address of the destination system, and puts the packet out on the
  573. Ethernet.)  The problem comes when a system is asked to send a packet
  574. to a system on a different network.  This problem is handled by
  575. gateways.  A gateway is a system that connects a network with one or
  576. more other networks.  Gateways are often normal computers that happen
  577. to have more than one network interface.  For example, we have a Unix
  578. machine that has two different Ethernet interfaces.  Thus it is
  579. connected to networks 128.6.4 and 128.6.3.  This machine can act as a
  580. gateway between those two networks.  The software on that machine must
  581. be set up so that it will forward packets from one network to the
  582. other.  That is, if a machine on network 128.6.4 sends a packet to the
  583. gateway, and the packet is addressed to a machine on network 128.6.3,
  584. the gateway will forward the packet to the destination.  Major
  585. communications centers often have gateways that connect a number of
  586. different networks.
  587.  
  588. Routing in IP is based entirely upon the network number of the
  589. destination address.  Each computer has a table of network numbers.
  590. For each network number, a gateway is listed.  This is the gateway to
  591. be used to get to that network.  Note that the gateway doesn't have to
  592. connect directly to the network.  It just has to be the best place to
  593. go to get there.  For example at Rutgers, our interface to NSFnet
  594. is at the John von Neuman Supercomputer Center (JvNC). Our connection
  595. to JvNC is via a high-speed serial line connected to a gateway whose
  596. address is 128.6.3.12.  Systems on net 128.6.3 will list 128.6.3.12 as
  597. the gateway for many off-campus networks.  However systems on net
  598. 128.6.4 will list 128.6.4.1 as the gateway to those same off-campus
  599. networks.  128.6.4.1 is the gateway between networks 128.6.4 and
  600. 128.6.3, so it is the first step in getting to JvNC.
  601.  
  602. When a computer wants to send a packet, it first checks to see if the
  603. destination address is on the system's own local network.  If so, the
  604. packet can be sent directly.  Otherwise, the system expects to find an
  605. entry for the network that the destination address is on.  The packet
  606. is sent to the gateway listed in that entry.  This table can get quite
  607. big.  For example, the Internet now includes several hundred
  608. individual networks.  Thus various strategies have been developed to
  609. reduce the size of the routing table.  One strategy is to depend upon
  610. "default routes".  Often, there is only one gateway out of a network.
  611. This gateway might connect a local Ethernet to a campus-wide backbone
  612. network.  In that case, we don't need to have a separate entry for
  613. every network in the world.  We simply define that gateway as a
  614. "default".  When no specific route is found for a packet, the packet
  615. is sent to the default gateway.  A default gateway can even be used
  616. when there are several gateways on a network.  There are provisions
  617. for gateways to send a message saying "I'm not the best gateway -- use
  618. this one instead."  (The message is sent via ICMP.  See rfc792.txt)
  619. Most network software is designed to use these messages to add entries
  620. to their routing tables.  Suppose network 128.6.4 has two gateways,
  621. 128.6.4.59 and 128.6.4.1.  128.6.4.59 leads to several other internal
  622. Rutgers networks.  128.6.4.1 leads indirectly to the NSFnet.  Suppose
  623. we set 128.6.4.59 as a default gateway, and have no other routing
  624. table entries.  Now what happens when we need to send a packet to MIT?
  625. MIT is network 18.  Since we have no entry for network 18, the packet
  626. will be sent to the default, 128.6.4.59.  As it happens, this gateway
  627. is the wrong one.  So it will forward the packet to 128.6.4.1.  But it
  628. will also send back an error saying in effect: "to get to network 18,
  629. use 128.6.4.1".  Our software will then add an entry to the routing
  630. table.  Any future packets to MIT will then go directly to 128.6.4.1.
  631.  
  632. Most IP experts recommend that individual computers should not try to
  633. keep track of the entire network.  Instead, they should start with
  634. default gateways, and let the gateways tell them the routes, as just
  635. described.  However this doesn't say how the gateways should find out
  636. about the routes.  The gateways can't depend upon this strategy.  They
  637. have to have fairly complete routing tables.  (It is possible to do
  638. hierarchical routing, where all of the gateways on a campus know about
  639. the campus network, but direct all off-campus traffic to a single
  640. gateway with connections off-campus.)  For this, some sort of routing
  641. protocol is needed.  A routing protocol is simply a technique for the
  642. gateways to find each other, and keep up to date about the best way to
  643. get to every network.  rfc1009.txt contains a review of gateway design
  644. and routing.  However rip.doc is probably a better introduction to the
  645. subject.  It contains some tutorial material, and a detailed
  646. description of the most commonly-used routing protocol.
  647.  
  648.  
  649. Details about Internet addresses: subnets and broadcasting
  650. ==========================================================
  651.  
  652. As indicated above, Internet addresses are 32-bit numbers, normally
  653. written as 4 octets (in decimal), e.g. 128.6.4.7.  There are actually
  654. 3 different types of address.  The problem is that the address has to
  655. indicate both the network and the host within the network.  It was
  656. felt that eventually there would be lots of networks.  Many of them
  657. would be small, but probably 24 bits would be needed to represent all
  658. the IP networks.  It was also felt that some very big networks might
  659. need 24 bits to represent all of their hosts.  This would seem to lead
  660. to 48 bit addresses.  But the designers really wanted to use 32 bit
  661. addresses.  So they adopted a kludge.  The assumption is that most of
  662. the networks will be small.  So they set up three different ranges of
  663. address.  Addresses beginning with 1 to 126 use only the first octet
  664. for the network number.  The other three octets are available for the
  665. host number.  Thus 24 bits are available for hosts.  These numbers are
  666. used for large networks.  But there can only be 126 of these very big
  667. networks.  The Arpanet is one, and there are a few large commercial
  668. networks.  But few normal organizations get one of these "class A"
  669. addresses.  For normal large organizations, "class B" addresses are
  670. used.  Class B addresses use the first two octets for the network
  671. number.  Thus network numbers are 128.1 through 191.254.  (We avoid 0
  672. and 255, for reasons that we see below.  We also avoid addresses
  673. beginning with 127, because that is used by some systems for special
  674. purposes.)  The last two octets are available for host addesses,
  675. giving 16 bits of host address.  This allows for 64516 computers,
  676. which should be enough for most organizations.  (It is possible to get
  677. more than one class B address, if you run out.)  Finally, class C
  678. addresses use three octets, in the range 192.1.1 to 223.254.254.
  679. These allow only 254 hosts on each network, but there can be lots of
  680. these networks.  Addresses above 223 are reserved for future use, as
  681. class D and E (which are currently not defined).
  682.  
  683. Many large organizations find it convenient to divide their network
  684. number into "subnet".  For example, Rutgers has been assigned a class
  685. B address, 128.6.  We find it convenient to use the third octet of the
  686. address to indicate which Ethernet a host is on.  This division has no
  687. significance outside of Rutgers.  A computer at another institution
  688. would send any packet whose destination address began with 128.6 on
  689. the best route to Rutgers.  They would not have different routes for
  690. 128.6.4 or 128.6.5.  But inside Rutgers, we treat 128.6.4 and 128.6.5
  691. as separate networks.  In effect, gateways inside Rutgers have
  692. separate entries for each Rutgers subnet, whereas gateways outside
  693. Rutgers just have one entry for 128.6. Note that we could do exactly
  694. the same thing by using a separate class C address for each Ethernet.
  695. As far as Rutgers is concerned, it would be just as convenient for us
  696. to have a number of class C addresses.  However using class C
  697. addresses would make things inconvenient for the rest of the world.
  698. Every institution that wanted to talk to us would have to have a
  699. separate entry for each one of our networks.  If every institution did
  700. this, there would be far too many networks for any reasonable gateway
  701. to keep track of.  By subdividing a class B network, we hide our
  702. internal structure from everyone else, and save them trouble.  This
  703. subnet strategy requires special provisions in the network software.
  704. It is described in rfc950.txt.
  705.  
  706. 0 and 255 have special meanings.  0 is reserved for machines that
  707. don't know their address.  In certain circumstances it is possible for
  708. a machine not to know the number of the network it is on, or even its
  709. own host address.  So 0.0.0.23 would be a machine that knew it was
  710. host number 23, but didn't know on what network.  
  711.  
  712. 255 is used for "broadcast".  A broadcast is a message that you want
  713. every system on the network to see.  Broadcasts are used in some
  714. situations where you don't know    who to talk to.  For example, suppose
  715. you need to look up a host name and get its Internet address.
  716. Sometimes you don't know the address of the system that has the host
  717. name data base.  In that case, you might send the request as a
  718. broadcast.  There are also cases where a number of systems are
  719. interested in information.  It is then less expensive to send a single
  720. broadcast than to send packets individually to each host that is
  721. interested in the information.  In order to send a broadcast, you use
  722. an address that is made by using your network address, with all ones
  723. in the part of the address where the host number goes.  For example,
  724. if you are on network 128.6.4, you would use 128.6.4.255 for
  725. broadcasts.  How this is actually implemented depends upon the medium.
  726. It is not possible to send broadcasts on the Arpanet, or on point to
  727. point lines.  However it is possible on an Ethernet.  If you use an
  728. Ethernet address with all its bits on (all ones), every machine on the
  729. Ethernet is supposed to look at that packet.
  730.  
  731. Although the official broadcast address for network 128.6.4 is now
  732. 128.6.4.255, there are some other addresses that may be treated as
  733. broadcasts by certain implementations.  For convenience, the standard
  734. also allows 255.255.255.255 to be used.  This refers to all hosts on
  735. the local network.  It is often simpler to use 255.255.255.255 instead
  736. of finding out the network number for the local network and forming a
  737. broadcast address such as 128.6.4.255.  In addition, certain older
  738. implementations may use 0 instead of 255 to form the broadcast
  739. address, e.g. 128.6.4.0.  Finally, certain older implementations may
  740. not understand about subnets.  Thus they consider the network number
  741. to be 128.6.  In that case, they will assume a broadcast address of
  742. 128.6.255.255 or 128.6.0.0.  Until support for broadcasts is
  743. implemented properly, it can be a somewhat dangerous feature to use.
  744.  
  745. Because 0 and 255 are used for unknown and broadcast addresses, normal
  746. hosts should never be given addresses containing 0 or 255.  Addresses
  747. should never begin with 0, 127, or any number above 223.  Addresses
  748. violating these rules are sometimes referred to as "Martians", because
  749. of rumors that the Central University of Mars is using network 225.
  750.  
  751.  
  752. Packet splitting and reassembly
  753. ===============================
  754.  
  755. TCP/IP is designed for use with many different kinds of network.
  756. Unfortunately, network designers do not agree about how big packets
  757. can be.  Ethernet packets can be 1500 octets long.  Arpanet packets
  758. have a maximum of around 1000 octets.  Some very fast networks have
  759. much larger packet sizes.  At first, you might think that IP should
  760. simply settle on the smallest possible size.  Unfortunately, this
  761. would cause serious performance problems.  When transferring large
  762. files, big packets are far more efficient than small ones.  So we want
  763. to be able to use the largest packet size possible.  But we also want
  764. to be able to handle networks with small limits.  There are two
  765. provisions for this.  First, TCP has the ability to "negotiate" about
  766. packet size.  When a TCP connection first opens, both ends can send
  767. the maximum packet size they can handle.  The smaller of these numbers
  768. is used for the rest of the connection.  This allows two
  769. implementations that can handle big packets to use them, but also lets
  770. them talk to implementations that can't handle them.  However this
  771. doesn't completely solve the problem.  The most serious problem is
  772. that the two ends don't necessarily know about all of the steps in
  773. between.  For example, when sending data between Rutgers and Berkeley,
  774. it is likely that both computers will be on Ethernets.  Thus they will
  775. both be prepared to handle 1500-octet packets.  However the connection
  776. will at some point end up going over the Arpanet.  It can't handle
  777. packets of that size.  For this reason, there are provisions to split
  778. packets up into pieces.  The IP header contains fields indicating the
  779. a packet has been split, and enough information to let the pieces be
  780. put back together.  If a gateway connects an Ethernet to the Arpanet,
  781. it must be prepared to take 1500-octet Ethernet packets and split them
  782. into pieces that will fit on the Arpanet.  Furthermore, every
  783. implementation of TCP/IP must be prepared to accept pieces and put
  784. them back together.  This is referred to as "reassembly".
  785.  
  786. TCP/IP implementations differ in the approach they take to deciding on
  787. packet size.  It is fairly common for implementations to use 576-byte
  788. packets whenever they can't verify that the entire path is able to
  789. handle larger packets.  The problem is that many implementations have
  790. bugs in the code to reassemble pieces.  So many implementors try to
  791. avoid ever having splits occur.  Different implementors take different
  792. approaches to deciding when it is safe to use large packets.  Some use
  793. them only for the local network.  Others will use them for any network
  794. on the same campus.  576 bytes is a "safe" size, which every
  795. implementation must support.
  796.  
  797.  
  798. Ethernet encapsulation: ARP
  799. ===========================
  800.  
  801. There was a brief discussion above about what IP packets looked like
  802. on an Ethernet.  The discussion showed the Ethernet header and
  803. checksum.  However it left one hole: It didn't say how to figure out
  804. what Ethernet address to use when you want to talk to a given Internet
  805. address.  In fact, there is a separate protocol for this, called ARP
  806. ("address resolution protocol").  Note by the way that ARP is not an
  807. IP protocol.  That is, the ARP packets do not have IP headers.
  808. Suppose you are on system 128.6.4.194 and you want to connect to
  809. system 128.6.4.7.  Your system will first verify that 128.6.4.7 is on
  810. the same network, so it can talk directly via Ethernet.  Then it will
  811. look up 128.6.4.7 in its ARP table, to see if it already knows the
  812. Ethernet address.  If so, it will stick on an Ethernet header, and
  813. send the packet.  But suppose this system is not in the ARP table.
  814. There is no way to send the packet, because you need the Ethernet
  815. address.  So it uses the ARP protocol to send an ARP request.
  816. Essentially an ARP request says "I need the Ethernet address for
  817. 128.6.4.7".  Every system listens to ARP requests.  When a system sees
  818. an ARP request for itself, it is required to respond.  So 128.6.4.7
  819. will see the request, and will respond with an ARP reply saying in
  820. effect "128.6.4.7 is 8:0:20:1:56:34".  (Recall that Ethernet addresses
  821. are 48 bits.  This is 6 octets.  Ethernet addresses are conventionally
  822. shown in hex, using the punctuation shown.)  Your system will save
  823. this information in its ARP table, so future packets will go directly.
  824. Most systems treat the ARP table as a cache, and clear entries in it
  825. if they have not been used in a certain period of time.
  826.  
  827. Note by the way that ARP requests must be sent as "broadcasts".  There
  828. is no way that an ARP request can be sent to the right system.  After
  829. all, the whole reason for sending an ARP request is that you don't
  830. know the Ethernet address.  So an Ethernet address of all ones is
  831. used, i.e. ff:ff:ff:ff:ff:ff.  By convention, every machine on the
  832. Ethernet is required to pay attention to packets with this as an
  833. address.  So every system sees every ARP requests.  They all look to
  834. see whether the request is for their own address.  If so, they
  835. respond.  If not, they could just ignore it.  (Some hosts will use ARP
  836. requests to update their knowledge about other hosts on the network,
  837. even if the request isn't for them.)  Note that packets whose IP
  838. address indicates broadcast (e.g. 255.255.255.255 or 128.6.4.255) are
  839. also sent with an Ethernet address that is all ones.
  840.  
  841.  
  842. Getting more information
  843. ========================
  844.  
  845. This directory contains documents describing the major protocols.
  846. There are literally hundreds of documents, so we have chosen the ones
  847. that seem most important.  Internet standards are called RFC's.  RFC
  848. stands for Request for Comment.  A proposed standard is initially
  849. issued as a proposal, and given an RFC number.  When it is finally
  850. accepted, it is added to Official Internet Protocols, but it is still
  851. referred to by the RFC number.  We have also included two IEN's.
  852. (IEN's are an older form of RFC.)  The convention is that whenever an
  853. RFC is revised, the revised version gets a new number.  This is fine
  854. for most purposes, but it causes problems with two documents: Assigned
  855. Numbers and Official Internet Protocols.  These documents are being
  856. revised all the time, so the RFC number keeps changing.  You will have
  857. to look in rfc-index.txt to find the number of the latest edition.
  858. Anyone who is seriously interested in TCP/IP should read the RFC
  859. describing IP (791).  RFC 1009 is also useful.  It is a specification
  860. for gateways to be used by NSFnet.  As such, it contains an overview
  861. of a lot of the TCP/IP technology.  You should probably also read the
  862. description of at least one of the application protocols, just to get
  863. a feel for the way things work.  Mail is probably a good one
  864. (821/822).  TCP (793) is of course a very basic specification.
  865. However the spec is fairly complex, so you should only read this when
  866. you have the time and patience to think about it carefully.
  867. Fortunately, the author of the major RFC's (Jon Postel) is a very good
  868. writer.  The TCP RFC is far easier to read than you would expect,
  869. given the complexity of what it is describing.  You can look at the
  870. other RFC's as you become curious about their subject matter.
  871.  
  872. Here is a list of the documents you are more likely to want:
  873.  
  874.    rfc-index - list of all RFC's
  875.    rfc1012  -  somewhat fuller list of all RFC's
  876.    rfc1011  -  Official Protocols.  It's useful to scan this to
  877.     see what tasks protocols have been built for.  This defines
  878.     which RFC's are actual standards, as opposed to requests
  879.     for comments.
  880.    rfc1010  -  Assigned Numbers.  If you are working with TCP/IP,
  881.     you will probably want a hardcopy of this as a reference.
  882.     It's not very exciting to read.  It lists all the offically
  883.     defined well-known ports and lots of other things.
  884.    rfc1009  -  NSFnet gateway specifications.  A good overview of
  885.     IP routing and gateway technology.
  886.    rfc973   -  update on domains
  887.    rfc959   -  FTP (file transfer)
  888.    rfc950   -  subnets
  889.    rfc894   -  how IP is to be put on Ethernet, see also rfc825
  890.    rfc882/3 -  domains (the database used to go from host names to
  891.     Internet address and back -- also used to handle UUCP
  892.     these days).  See also rfc973
  893.    rfc854/5 -  telnet - protocol for remote logins
  894.    rfc826   -  ARP - protocol for finding out Ethernet addresses
  895.    rfc821/2 -  mail
  896.    rfc814   -  names and ports - general concepts behind well-known ports
  897.    rfc793   -  TCP
  898.    rfc792   -  ICMP
  899.    rfc791   -  IP
  900.    rfc768   -  UDP
  901.    rip.doc  -  details of the most commonly-used routing protocol
  902.    ien-116  -  old name server (still needed by several kinds of system)
  903.    ien-48   -  the Catenet model, general description of the philosophy
  904.     behind TCP/IP
  905.   
  906. The following documents are somewhat more specialized.
  907.  
  908.    rfc813   -  window and acknowledgement strategies in TCP
  909.    rfc815   -  packet reassembly techniques
  910.    rfc816   -  fault isolation and resolution techniques
  911.    rfc817   -  modularity and efficiency in implementation
  912.    rfc879   -  the maximum segment size option in TCP
  913.    rfc896   -  congestion control
  914.    rfc827,888,904,975,985  - EGP
  915.  
  916. To those of you who may be reading this document remotely instead of
  917. at Rutgers: The most important RFC's have been collected into a
  918. three-volume set, the DDN Protocol Handbook.  It is available from the
  919. DDN Network Information Center, SRI International, 333 Ravenswood
  920. Avenue, Menlo Park, California 94025 (telephone: 800-235-3155).
  921. You should be able to get them via anonymous FTP from sri-nic.arpa.
  922. File names are:
  923.   RFC's:
  924.     rfc:rfc-index.txt
  925.     rfc:rfcxxx.txt
  926.   IEN's:
  927.     ien:ien-index.txt
  928.     ien:ien-xxx.txt
  929. rip.doc is available by anonymous FTP from topaz.rutgers.edu, as
  930. /pub/tcp-ip-docs/rip.doc.
  931.  
  932. Sites with access to UUCP but not FTP may be able to retreive them
  933. via UUCP from UUCP host rutgers.  The file names would be 
  934.   RFC's:
  935.     /topaz/pub/pub/tcp-ip-docs/rfc-index.txt
  936.     /topaz/pub/pub/tcp-ip-docs/rfcxxx.txt
  937.   IEN's:
  938.     /topaz/pub/pub/tcp-ip-docs/ien-index.txt
  939.     /topaz/pub/pub/tcp-ip-docs/ien-xxx.txt
  940.   /topaz/pub/pub/tcp-ip-docs/rip.doc
  941. Note that SRI-NIC has the entire set of RFC's and IEN's, but rutgers
  942. and topaz have only those specifically mentioned above.
  943.